package com.gooseeker.mbus;
 
import java.io.BufferedInputStream;  
import java.io.ByteArrayInputStream;  
import java.io.IOException;  
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import com.gooseeker.util.Constants;
 
/** 
 * @author WuDian 
 *  
 */ 
public class Marktest implements Runnable{  
    public static void main(String[] args) {  
 
        ExecutorService es = Executors.newFixedThreadPool(2);
        es.execute(new Marktest());
        System.out.println("1111111111111111");
        es.shutdownNow();
        if(es.isShutdown())
        {
        	System.out.println("2222222222222222");
        }
        
        es = Executors.newFixedThreadPool(2);
        es.execute(new Marktest());
        System.out.println("333333333333333333");
    }  
    


	@Override
	public void run() {

    	try {  
            // 初始化一个字节数组，内有5个字节的数据  
            byte[] bytes={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};  
            // 用一个ByteArrayInputStream来读取这个字节数组  
            ByteArrayInputStream in=new ByteArrayInputStream(bytes);  
            // 将ByteArrayInputStream包含在一个BufferedInputStream，并初始化缓冲区大小为2。  
            BufferedInputStream bis=new BufferedInputStream(in); 
            byte[] buffer = new byte[4];
            while(bis.available() > 4)
			{
				bis.mark(0);
				bis.read(buffer);
				for(int i=0;i<buffer.length;i++)
				{
					System.out.print(buffer[i]+",");
				}
				System.out.println();
				boolean isLagel = false;
				if(isLagel)
				{
					bis.reset();
					bis.skip(1);
				}
			}
            
//            bis.mark(0); 
//            // 读取字节1  
//            System.out.print(bis.read()+",");  
//            // 在字节2处做标记，同时设置readlimit参数为1  
//            // 根据JAVA文档mark以后最多只能读取1个字节，否则mark标记失效，但实际运行结果不是这样  
//            System.out.println("mark");  
//             
//              
//            /* 
//             * 连续读取两个字节，超过了readlimit的大小，mark标记仍有效 
//             */ 
//            // 连续读取两个字节  
//            System.out.print(bis.read()+",");   
//            System.out.print(bis.read()+",");   
//            // 调用reset方法，未发生异常，说明mark标记仍有效。  
//            // 因为，虽然readlimit参数为1，但是这个BufferedInputStream类的缓冲区大小为2，  
//            // 所以允许读取2字节  
//            System.out.println("reset");  
//            bis.reset();  
//              
//            /* 
//             * 连续读取3个字节，超过了缓冲区大小，mark标记失效。 
//             * 在这个例子中BufferedInputStream类的缓冲区大小大于readlimit, 
//             * mark标记由缓冲区大小决定 
//             */ 
//            // reset重置后连续读取3个字节，超过了BufferedInputStream类的缓冲区大小  
//            System.out.print(bis.read()+",");  
//            System.out.print(bis.read()+",");  
//            System.out.print(bis.read()+",");  
//            // 再次调用reset重置，抛出异常，说明mark后读取3个字节，mark标记失效  
//            System.out.println("reset again");  
//            bis.reset(); 
//            bis.skip(1);
//            System.out.print(bis.read()+",");  
//            System.out.print(bis.read()+",");  
//            System.out.print(bis.read()+",");  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    
	}
}  

